<!doctype html>
<!--
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
<html>
  <head>
    <title>property.observe changes</title>
    <script src="../../../webcomponentsjs/webcomponents.js"></script>
    <link rel="import" href="../../polymer.html">
    <script src="../../../tools/test/htmltest.js"></script>
    <script src="../../../tools/test/chai/chai.js"></script>
  </head>
  <body>
    <x-test id="test"></x-test>
    <x-test2 id="test"></x-test2>

    <script>
      changes = 0;
      doneChanges = 4;
      function checkDone() {
        if (doneChanges == ++changes) {
          done();
        }
      }
    </script>

    <polymer-element name="x-test">
      <template>
      </template>
      <script>
        (function() {
          Polymer('x-test', {
            bar: '',
            observe: {
              bar: 'validate',
              pie: 'validate',
              'a.b.c': 'validateSubPath'
            },
            ready: function() {
              this.bar = 'bar';
              this.pie = 'pie';
              this.a = {b: {c: 'exists'}};
            },
            barChanged: function() {
              //console.log('I should not be called')
            },
            validate: function() {
              //console.log('validate');
              chai.assert.equal(this.bar, 'bar', 'custom change observer called');
              chai.assert.equal(this.pie, 'pie', 'custom change observer called');
              checkDone();
            },
            validateSubPath: function(oldValue, newValue) {
              //console.log('validateSubPath', oldValue, newValue);
              chai.assert.equal(newValue, 'exists', 'subpath change observer called');
              checkDone();
            }
          });
        })();
      </script>
    </polymer-element>

     <polymer-element name="x-test2" extends="x-test">
      <template>
      </template>
      <script>
        (function() {
          Polymer('x-test2', {
            bar: '',
            observe: {
              noogle: 'validate'
            },
            ready: function() {
              this.super();
              this.noogle = 'noogle'
            }
          });
        })();
      </script>
    </polymer-element>
  </body>
</html>
